package com.coder4j.utils;


import java.util.Arrays;

/**
 * Object 对象工具类，判断一系列对象的是否为空
 * @author Keller
 * @date 2021年06月23日14:57:17
 */
public class ObjectUtils {
    /**
     * 只要有一个为空的，就返回 true
     * 判断一系列字符串中是否有空的（包含:空字符串、null、纯空格字符）
     * @param parameters 需要判断的字符串，可以是多个
     * @return
     */
    public static boolean hasEmpty(Object... parameters){
        for(Object param:parameters){
            if(param == null){
                return true;
            }
            if(param instanceof String){
                String str = (String) param;
                if(str.isEmpty()){
                    return true;
                }
            }
        }
        return false;
    }

    /**
     * 仅当所有元素都有值才返回 true
     * 判断一组对象中没有空值，仅当所有参数都有值时才会返回 true
     * @param parameters
     * @return
     */
    public static boolean noEmpty(Object... parameters){
        return !hasEmpty(parameters);
    }

    /**
     * 只要有一个元素有值，就返回 true
     * 判断一组元素是否有值
     * @param parameters
     * @return
     */
    public static boolean hasValue(Object... parameters){
        for(Object param:parameters){
            if(param != null){
                if(param instanceof String){
                    String str = (String)param;
                    return !str.isEmpty();
                }else{
                    return true;
                }
            }

        }
        return false;
    }

    /**
     * 仅当所有元素都没值才返回true
     * @param parameters
     * @return
     */
    public static boolean noValue(Object... parameters){
        return !hasValue(parameters);
    }


    /**
     * 校验一个对象是否在指定范围内
     * @param obj 对象
     * @param array 对象数组
     * @return
     */
    @SafeVarargs
    public static <T> boolean contains(T obj, T... array){
        return Arrays.asList(array).contains(obj);
    }

    public static <T> T get(T obj,T defaultValue){
        return obj == null ? defaultValue : obj;
    }
}
